/***************************************************************************

    dsp32ops.c
    Core implementation for the portable DSP32 emulator.

****************************************************************************

    Copyright Aaron Giles
    All rights reserved.

    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are
    met:

        * Redistributions of source code must retain the above copyright
          notice, this list of conditions and the following disclaimer.
        * Redistributions in binary form must reproduce the above copyright
          notice, this list of conditions and the following disclaimer in
          the documentation and/or other materials provided with the
          distribution.
        * Neither the name 'MAME' nor the names of its contributors may be
          used to endorse or promote products derived from this software
          without specific prior written permission.

    THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR
    IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT,
    INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
    (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
    HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
    STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
    IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
    POSSIBILITY OF SUCH DAMAGE.

****************************************************************************/



//**************************************************************************
//  COMPILE-TIME OPTIONS
//**************************************************************************

// these defined latencies are a pain to implement, but are necessary
#define EMULATE_MEMORY_LATENCY		(1)
#define EMULATE_MULTIPLIER_LATENCY	(1)
#define EMULATE_AFLAGS_LATENCY		(1)

// these optimizations should have some effect, but they don't really, so
// leave them off
#define IGNORE_DAU_UV_FLAGS			(0)
#define ASSUME_WRITEABLE			(0)
#define ASSUME_UNCONDITIONAL_CAU	(0)



//**************************************************************************
//  MACROS
//**************************************************************************

#define SET_V_16(a,b,r)			m_vflags = (((a) ^ (b) ^ (r) ^ ((r) >> 1)) << 8)
#define SET_NZC_16(r)			m_nzcflags = ((r) << 8)
#define SET_NZCV_16(a,b,r)		SET_NZC_16(r); SET_V_16(a,b,r)
#define SET_NZ00_16(r)			m_nzcflags = (((r) << 8) & 0xffffff); m_vflags = 0

#define SET_V_24(a,b,r)			m_vflags = ((a) ^ (b) ^ (r) ^ ((r) >> 1))
#define SET_NZC_24(r)			m_nzcflags = (r)
#define SET_NZCV_24(a,b,r)		SET_NZC_24(r); SET_V_24(a,b,r)
#define SET_NZ00_24(r)			m_nzcflags = ((r) & 0xffffff); m_vflags = 0

#define TRUNCATE24(a)			((a) & 0xffffff)
#define EXTEND16_TO_24(a)		TRUNCATE24((INT32)(INT16)(a))
#define REG16(a)				((UINT16)m_r[a])
#define REG24(a)				(m_r[a])

#define WRITEABLE_REGS			(0x6f3efffe)
#if ASSUME_WRITEABLE
#define IS_WRITEABLE(r) 		(1)
#else
#define IS_WRITEABLE(r)			(WRITEABLE_REGS & (1 << (r)))
#endif

#if ASSUME_UNCONDITIONAL_CAU
#define CONDITION_IS_TRUE()		(1)
#else
#define CONDITION_IS_TRUE()		(!(op & 0x400) || (condition((op >> 12) & 15)))
#endif

#if EMULATE_MEMORY_LATENCY
#define WWORD_DEFERRED(a,v)		do { int bufidx = m_mbuf_index & 3; m_mbufaddr[bufidx] = -(a); m_mbufdata[bufidx] = (v); } while (0)
#define WLONG_DEFERRED(a,v)		do { int bufidx = m_mbuf_index & 3; m_mbufaddr[bufidx] = (a); m_mbufdata[bufidx] = (v); } while (0)
#define PROCESS_DEFERRED_MEMORY()									\
	if (m_mbufaddr[++m_mbuf_index & 3] != 1)					\
	{																	\
		int bufidx = m_mbuf_index & 3;								\
		if (m_mbufaddr[bufidx] >= 0)								\
			WLONG(m_mbufaddr[bufidx], m_mbufdata[bufidx]);	\
		else															\
			WWORD(-m_mbufaddr[bufidx], m_mbufdata[bufidx]);	\
		m_mbufaddr[bufidx] = 1;										\
	}
#else
#define WWORD_DEFERRED(a,v)	WWORD(a,v)
#define WLONG_DEFERRED(a,v)	WLONG(a,v)
#define PROCESS_DEFERRED_MEMORY()
#endif

#if EMULATE_MULTIPLIER_LATENCY
#define DEFERRED_MULTIPLIER(x)	dau_get_amult(x)
#else
#define DEFERRED_MULTIPLIER(x)	m_a[x]
#endif

#if EMULATE_AFLAGS_LATENCY
#define DEFERRED_NZFLAGS()	dau_get_anzflags()
#define DEFERRED_VUFLAGS()	dau_get_avuflags()
#else
#define DEFERRED_NZFLAGS()	m_NZflags
#define DEFERRED_VUFLAGS()	m_VUflags
#endif



//**************************************************************************
//  TYPEDEFS
//**************************************************************************

union int_double
{
	double d;
	UINT32 i[2];
};



//**************************************************************************
//  IMPLEMENTATION
//**************************************************************************

void dsp32c_device::illegal(UINT32 op)
{
}


void dsp32c_device::unimplemented(UINT32 op)
{
    fatalerror("Unimplemented op @ %06X: %08X (dis=%02X, tbl=%03X)", PC - 4, op, op >> 25, op >> 21);
}


inline void dsp32c_device::execute_one()
{
	UINT32 op;

	PROCESS_DEFERRED_MEMORY();
	debugger_instruction_hook(this, PC);
	op = ROPCODE(PC);
	m_icount -= 4;	// 4 clocks per cycle
	PC += 4;
	if (op)
		(this->*s_dsp32ops[op >> 21])(op);
}



//**************************************************************************
//  CAU HELPERS
//**************************************************************************

UINT32 dsp32c_device::cau_read_pi_special(UINT8 i)
{
	switch (i)
	{
		case 4:		return m_ibuf;
		case 5:		return m_obuf;
		case 6:		update_pcr(m_pcr & ~PCR_PDFs); return m_pdr;
		case 14:	return m_piop;
		case 20:	return m_pdr2;
		case 22:	update_pcr(m_pcr & ~PCR_PIFs); return m_pir;
		case 30:	return m_pcw;
		default:	fprintf(stderr, "Unimplemented CAU PI read = %X\n", i);
	}
	return 0;
}


void dsp32c_device::cau_write_pi_special(UINT8 i, UINT32 val)
{
	switch (i)
	{
		case 4:		m_ibuf = val;	break;
		case 5:		m_obuf = val;	break;
		case 6:		m_pdr = val; update_pcr(m_pcr | PCR_PDFs); break;
		case 14:	m_piop = val;	break;
		case 20:	m_pdr2 = val;	break;
		case 22:	m_pir = val; update_pcr(m_pcr | PCR_PIFs); break;
		case 30:	m_pcw = val;	break;
		default:	fprintf(stderr, "Unimplemented CAU PI write = %X\n", i);
	}
}


inline UINT8 dsp32c_device::cau_read_pi_1byte(int pi)
{
	int p = (pi >> 5) & 0x1f;
	int i = (pi >> 0) & 0x1f;
	if (p)
	{
		UINT32 result = RBYTE(m_r[p]);
		m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
		return result;
	}
	else
		return cau_read_pi_special(i);
}


inline UINT16 dsp32c_device::cau_read_pi_2byte(int pi)
{
	int p = (pi >> 5) & 0x1f;
	int i = (pi >> 0) & 0x1f;
	if (p)
	{
		UINT32 result = RWORD(m_r[p]);
		if (i < 22 || i > 23)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 2);
		return result;
	}
	else
		return cau_read_pi_special(i);
}


inline UINT32 dsp32c_device::cau_read_pi_4byte(int pi)
{
	int p = (pi >> 5) & 0x1f;
	int i = (pi >> 0) & 0x1f;
	if (p)
	{
		UINT32 result = RLONG(m_r[p]);
		if (i < 22 || i > 23)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 4);
		return result;
	}
	else
		return cau_read_pi_special(i);
}


inline void dsp32c_device::cau_write_pi_1byte(int pi, UINT8 val)
{
	int p = (pi >> 5) & 0x1f;
	int i = (pi >> 0) & 0x1f;
	if (p)
	{
		WBYTE(m_r[p], val);
		m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
	}
	else
		cau_write_pi_special(i, val);
}


inline void dsp32c_device::cau_write_pi_2byte(int pi, UINT16 val)
{
	int p = (pi >> 5) & 0x1f;
	int i = (pi >> 0) & 0x1f;
	if (p)
	{
		WWORD(m_r[p], val);
		if (i < 22 || i > 23)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 2);
	}
	else
		cau_write_pi_special(i, val);
}


inline void dsp32c_device::cau_write_pi_4byte(int pi, UINT32 val)
{
	int p = (pi >> 5) & 0x1f;
	int i = (pi >> 0) & 0x1f;
	if (p)
	{
		WLONG(m_r[p], (INT32)(val << 8) >> 8);
		if (i < 22 || i > 23)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i] * 4);
	}
	else
		cau_write_pi_special(i, val);
}



//**************************************************************************
//  DAU HELPERS
//**************************************************************************

inline double dsp32c_device::dau_get_amult(int aidx)
{
	int bufidx = (m_abuf_index - 1) & 3;
	double val = m_a[aidx];
	while (m_icount >= m_abufcycle[bufidx] - 2 * 4)
	{
		if (m_abufreg[bufidx] == aidx)
			val = m_abuf[bufidx];
		bufidx = (bufidx - 1) & 3;
	}
	return val;
}


inline double dsp32c_device::dau_get_anzflags()
{
	int bufidx = (m_abuf_index - 1) & 3;
	double nzflags = m_NZflags;
	while (m_icount >= m_abufcycle[bufidx] - 3 * 4)
	{
		nzflags = m_abufNZflags[bufidx];
		bufidx = (bufidx - 1) & 3;
	}
	return nzflags;
}


inline UINT8 dsp32c_device::dau_get_avuflags()
{
#if (!IGNORE_DAU_UV_FLAGS)
	int bufidx = (m_abuf_index - 1) & 3;
	UINT8 vuflags = m_VUflags;
	while (m_icount >= m_abufcycle[bufidx] - 3 * 4)
	{
		vuflags = m_abufVUflags[bufidx];
		bufidx = (bufidx - 1) & 3;
	}
	return vuflags;
#else
	return 0;
#endif
}


inline void dsp32c_device::remember_last_dau(int aidx)
{
#if (EMULATE_MULTIPLIER_LATENCY || EMULATE_AFLAGS_LATENCY)
	int bufidx = m_abuf_index++ & 3;
	m_abuf[bufidx] = m_a[aidx];
	m_abufreg[bufidx] = aidx;
	m_abufNZflags[bufidx] = m_NZflags;
#if (!IGNORE_DAU_UV_FLAGS)
	m_abufVUflags[bufidx] = m_VUflags;
#endif
	m_abufcycle[bufidx] = m_icount;
#endif
}


inline void dsp32c_device::dau_set_val_noflags(int aidx, double res)
{
	remember_last_dau(aidx);
	m_a[aidx] = res;
}


inline void dsp32c_device::dau_set_val_flags(int aidx, double res)
{
	remember_last_dau(aidx);
#if (!IGNORE_DAU_UV_FLAGS)
{
	double absres = (res < 0) ? -res : res;
	m_VUflags = 0;
	if (absres < 5.87747e-39)
	{
		if (absres != 0)
			m_VUflags = UFLAGBIT;
		res = 0.0;
	}
	else if (absres > 3.40282e38)
	{
		m_VUflags = VFLAGBIT;
//      debugger_break(Machine);
//      fprintf(stderr, "Result = %g\n", absres);
		res = (res < 0) ? -3.40282e38 : 3.40282e38;
	}
}
#endif
	m_NZflags = res;
	m_a[aidx] = res;
}


inline double dsp32c_device::dsp_to_double(UINT32 val)
{
	int_double id;

	if (val == 0)
		return 0;
	else if ((INT32)val > 0)
	{
		int exponent = ((val & 0xff) - 128 + 1023) << 20;
		id.i[BYTE_XOR_BE(0)] = exponent + (val >> 11);
		id.i[BYTE_XOR_BE(1)] = (val << 21) & 0xe0000000;
	}
	else
	{
		int exponent = ((val & 0xff) - 128 + 1023) << 20;
		val = -(val & 0xffffff00);
		id.i[BYTE_XOR_BE(0)] = 0x80000000 + exponent + ((val >> 11) & 0x001fffff);
		id.i[BYTE_XOR_BE(1)] = (val << 21) & 0xe0000000;
	}
	return id.d;
}


inline UINT32 dsp32c_device::double_to_dsp(double val)
{
	int mantissa, exponent;
	int_double id;
	id.d = val;
	mantissa = ((id.i[BYTE_XOR_BE(0)] & 0x000fffff) << 11) | ((id.i[BYTE_XOR_BE(1)] & 0xe0000000) >> 21);
	exponent = ((id.i[BYTE_XOR_BE(0)] & 0x7ff00000) >> 20) - 1023 + 128;
	if (exponent < 0)
		return 0x00000000;
	else if (exponent > 255)
	{
//      debugger_break(Machine);
//      fprintf(stderr, "Exponent = %d\n", exponent);
		return ((INT32)id.i[BYTE_XOR_BE(0)] >= 0) ? 0x7fffffff : 0x800000ff;
	}
	else if ((INT32)id.i[BYTE_XOR_BE(0)] >= 0)
		return exponent | mantissa;
	else
	{
		mantissa = -mantissa;
		if (mantissa == 0) { mantissa = 0x80000000; exponent--; }
		return 0x80000000 | exponent | (mantissa & 0xffffff00);
	}
}


double dsp32c_device::dau_read_pi_special(int i)
{
    fatalerror("Unimplemented dau_read_pi_special(%d)", i);
	return 0;
}


void dsp32c_device::dau_write_pi_special(int i, double val)
{
    fatalerror("Unimplemented dau_write_pi_special(%d)", i);
}


inline double dsp32c_device::dau_read_pi_double_1st(int pi, int multiplier)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	m_lastp = p;
	if (p)
	{
		UINT32 result = RLONG(m_r[p]);
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
		return dsp_to_double(result);
	}
	else if (i < 4)
		return multiplier ? DEFERRED_MULTIPLIER(i) : m_a[i];
	else
		return dau_read_pi_special(i);
}


inline double dsp32c_device::dau_read_pi_double_2nd(int pi, int multiplier, double xval)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	if (p == 15) p = m_lastp;		// P=15 means Z inherits from Y, Y inherits from X
	m_lastp = p;
	if (p)
	{
		UINT32 result;
		result = RLONG(m_r[p]);
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
		return dsp_to_double(result);
	}
	else if (i < 4)
		return multiplier ? DEFERRED_MULTIPLIER(i) : m_a[i];
	else
		return dau_read_pi_special(i);
}


inline UINT32 dsp32c_device::dau_read_pi_4bytes(int pi)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	m_lastp = p;
	if (p)
	{
		UINT32 result = RLONG(m_r[p]);
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
		return result;
	}
	else if (i < 4)
		return double_to_dsp(m_a[i]);
	else
		return dau_read_pi_special(i);
}


inline UINT16 dsp32c_device::dau_read_pi_2bytes(int pi)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	m_lastp = p;
	if (p)
	{
		UINT32 result = RWORD(m_r[p]);
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 2);
		return result;
	}
	else if (i < 4)
		return double_to_dsp(m_a[i]);
	else
		return dau_read_pi_special(i);
}


inline void dsp32c_device::dau_write_pi_double(int pi, double val)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	if (p == 15) p = m_lastp;		// P=15 means Z inherits from Y, Y inherits from X
	if (p)
	{
		WLONG_DEFERRED(m_r[p], double_to_dsp(val));
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
	}
	else if (i < 4)
		dau_set_val_noflags(i, val);
	else
		dau_write_pi_special(i, val);
}


inline void dsp32c_device::dau_write_pi_4bytes(int pi, UINT32 val)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	if (p == 15) p = m_lastp;		// P=15 means Z inherits from Y, Y inherits from X
	if (p)
	{
		m_lastp = p;
		WLONG_DEFERRED(m_r[p], val);
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 4);
	}
	else if (i < 4)
		dau_set_val_noflags(i, dsp_to_double(val));
	else
		dau_write_pi_special(i, val);
}


inline void dsp32c_device::dau_write_pi_2bytes(int pi, UINT16 val)
{
	int p = (pi >> 3) & 15;
	int i = (pi >> 0) & 7;

	if (p == 15) p = m_lastp;		// P=15 means Z inherits from Y, Y inherits from X
	if (p)
	{
		m_lastp = p;
		WWORD_DEFERRED(m_r[p], val);
		if (i < 6)
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16]);
		else
			m_r[p] = TRUNCATE24(m_r[p] + m_r[i+16] * 2);
	}
	else if (i < 4)
		dau_set_val_noflags(i, dsp_to_double(val << 16));
	else
		dau_write_pi_special(i, val);
}



//**************************************************************************
//  COMMON CONDITION ROUTINE
//**************************************************************************

#if (!ASSUME_UNCONDITIONAL_CAU)
int dsp32c_device::condition(int cond)
{
	switch (cond)
	{
		case 0:
			return 0;
		case 1:
			return 1;
		case 2:
			return !nFLAG;
		case 3:
			return nFLAG;
		case 4:
			return !zFLAG;
		case 5:
			return zFLAG;
		case 6:
			return !vFLAG;
		case 7:
			return vFLAG;
		case 8:
			return !cFLAG;
		case 9:
			return cFLAG;
		case 10:
			return !(nFLAG ^ cFLAG);
		case 11:
			return (nFLAG ^ cFLAG);
		case 12:
			return !(zFLAG | (nFLAG ^ vFLAG));
		case 13:
			return (zFLAG | (nFLAG ^ vFLAG));
		case 14:
			return !(cFLAG | zFLAG);
		case 15:
			return (cFLAG | zFLAG);

		case 16:
			return !(DEFERRED_VUFLAGS() & UFLAGBIT);
		case 17:
			return (DEFERRED_VUFLAGS() & UFLAGBIT);
		case 18:
			return !(DEFERRED_NZFLAGS() < 0);
		case 19:
			return (DEFERRED_NZFLAGS() < 0);
		case 20:
			return !(DEFERRED_NZFLAGS() == 0);
		case 21:
			return (DEFERRED_NZFLAGS() == 0);
		case 22:
			return !(DEFERRED_VUFLAGS() & VFLAGBIT);
		case 23:
			return (DEFERRED_VUFLAGS() & VFLAGBIT);
		case 24:
			return !(DEFERRED_NZFLAGS() <= 0);
		case 25:
			return (DEFERRED_NZFLAGS() <= 0);

		case 32:	// !ibf
		case 33:	// ibf
		case 34:	// !obe
		case 35:	// obe
		case 36:	// !pdf
		case 37:	// pdf
		case 38:	// !pif
		case 39:	// pif
		case 40:	// !sy
		case 41:	// sy
		case 42:	// !fb
		case 43:	// fb
		case 44:	// !ireq1
		case 45:	// ireq1
		case 46:	// !ireq2
		case 47:	// ireq2
		default:
		    fatalerror("Unimplemented condition: %X", cond);
	}
}
#endif



//**************************************************************************
//  CAU BRANCH INSTRUCTION IMPLEMENTATION
//**************************************************************************

void dsp32c_device::nop(UINT32 op)
{
	if (op == 0)
		return;
	execute_one();
	PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
}


void dsp32c_device::goto_t(UINT32 op)
{
	execute_one();
	PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
}


void dsp32c_device::goto_pl(UINT32 op)
{
	if (!nFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_mi(UINT32 op)
{
	if (nFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_ne(UINT32 op)
{
	if (!zFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_eq(UINT32 op)
{
	if (zFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_vc(UINT32 op)
{
	if (!vFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_vs(UINT32 op)
{
	if (vFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_cc(UINT32 op)
{
	if (!cFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_cs(UINT32 op)
{
	if (cFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_ge(UINT32 op)
{
	if (!(nFLAG ^ vFLAG))
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_lt(UINT32 op)
{
	if (nFLAG ^ vFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_gt(UINT32 op)
{
	if (!(zFLAG | (nFLAG ^ vFLAG)))
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_le(UINT32 op)
{
	if (zFLAG | (nFLAG ^ vFLAG))
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_hi(UINT32 op)
{
	if (!cFLAG && !zFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_ls(UINT32 op)
{
	if (cFLAG || zFLAG)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_auc(UINT32 op)
{
	if (!(DEFERRED_VUFLAGS() & UFLAGBIT))
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_aus(UINT32 op)
{
	if (DEFERRED_VUFLAGS() & UFLAGBIT)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_age(UINT32 op)
{
	if (DEFERRED_NZFLAGS() >= 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_alt(UINT32 op)
{
	if (DEFERRED_NZFLAGS() < 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_ane(UINT32 op)
{
	if (DEFERRED_NZFLAGS() != 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_aeq(UINT32 op)
{
	if (DEFERRED_NZFLAGS() == 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_avc(UINT32 op)
{
	if (!(DEFERRED_VUFLAGS() & VFLAGBIT))
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_avs(UINT32 op)
{
	if (DEFERRED_VUFLAGS() & VFLAGBIT)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_agt(UINT32 op)
{
	if (DEFERRED_NZFLAGS() > 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_ale(UINT32 op)
{
	if (DEFERRED_NZFLAGS() <= 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::goto_ibe(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_ibf(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_obf(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_obe(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_pde(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_pdf(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_pie(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_pif(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_syc(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_sys(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_fbc(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_fbs(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_irq1lo(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_irq1hi(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_irq2lo(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::goto_irq2hi(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::dec_goto(UINT32 op)
{
	int hr = (op >> 21) & 0x1f;
	int old = (INT16)m_r[hr];
	m_r[hr] = EXTEND16_TO_24(m_r[hr] - 1);
	if (old >= 0)
	{
		execute_one();
		PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
	}
}


void dsp32c_device::call(UINT32 op)
{
	int mr = (op >> 21) & 0x1f;
	if (IS_WRITEABLE(mr))
		m_r[mr] = PC + 4;
	execute_one();
	PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (INT16)op);
}


void dsp32c_device::goto24(UINT32 op)
{
	execute_one();
	PC = TRUNCATE24(REG24((op >> 16) & 0x1f) + (op & 0xffff) + ((op >> 5) & 0xff0000));
}


void dsp32c_device::call24(UINT32 op)
{
	int mr = (op >> 16) & 0x1f;
	if (IS_WRITEABLE(mr))
		m_r[mr] = PC + 4;
	execute_one();
	PC = (op & 0xffff) + ((op >> 5) & 0xff0000);
}


void dsp32c_device::do_i(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::do_r(UINT32 op)
{
	unimplemented(op);
}



//**************************************************************************
//  CAU 16-BIT ARITHMETIC IMPLEMENTATION
//**************************************************************************

void dsp32c_device::add_si(UINT32 op)
{
	int dr = (op >> 21) & 0x1f;
	int hrval = REG16((op >> 16) & 0x1f);
	int res = hrval + (UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZCV_16(hrval, op, res);
}


void dsp32c_device::add_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s2rval + s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZCV_16(s1rval, s2rval, res);
	}
}


void dsp32c_device::mul2_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = s1rval * 2;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZCV_16(s1rval, 0, res);
	}
}


void dsp32c_device::subr_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s1rval - s2rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZCV_16(s1rval, s2rval, res);
	}
}


void dsp32c_device::addr_ss(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::sub_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s2rval - s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZCV_16(s1rval, s2rval, res);
	}
}


void dsp32c_device::neg_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = -s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZCV_16(s1rval, 0, res);
	}
}


void dsp32c_device::andc_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s2rval & ~s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZ00_16(res);
	}
}


void dsp32c_device::cmp_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int drval = REG16((op >> 16) & 0x1f);
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = drval - s1rval;
		SET_NZCV_16(drval, s1rval, res);
	}
}


void dsp32c_device::xor_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s2rval ^ s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZ00_16(res);
	}
}


void dsp32c_device::rcr_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = ((m_nzcflags >> 9) & 0x8000) | (s1rval >> 1);
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 1) << 24);
		m_vflags = 0;
	}
}


void dsp32c_device::or_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s2rval | s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZ00_16(res);
	}
}


void dsp32c_device::rcl_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = ((m_nzcflags >> 24) & 0x0001) | (s1rval << 1);
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 0x8000) << 9);
		m_vflags = 0;
	}
}


void dsp32c_device::shr_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = s1rval >> 1;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 1) << 24);
		m_vflags = 0;
	}
}


void dsp32c_device::div2_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = (s1rval & 0x8000) | (s1rval >> 1);
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		m_nzcflags = ((res & 0xffff) << 8) | ((s1rval & 1) << 24);
		m_vflags = 0;
	}
}


void dsp32c_device::and_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG16((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG16((op >> 0) & 0x1f) : REG16(dr);
		int res = s2rval & s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		SET_NZ00_16(res);
	}
}


void dsp32c_device::test_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int drval = REG16((op >> 16) & 0x1f);
		int s1rval = REG16((op >> 5) & 0x1f);
		int res = drval & s1rval;
		SET_NZ00_16(res);
	}
}


void dsp32c_device::add_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = drval + (UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZCV_16(drval, op, res);
}


void dsp32c_device::subr_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = (UINT16)op - drval;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZCV_16(drval, op, res);
}


void dsp32c_device::addr_di(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::sub_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = drval - (UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZCV_16(drval, op, res);
}


void dsp32c_device::andc_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = drval & ~(UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZ00_16(res);
}


void dsp32c_device::cmp_di(UINT32 op)
{
	int drval = REG16((op >> 16) & 0x1f);
	int res = drval - (UINT16)op;
	SET_NZCV_16(drval, op, res);
}


void dsp32c_device::xor_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = drval ^ (UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZ00_16(res);
}


void dsp32c_device::or_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = drval | (UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZ00_16(res);
}


void dsp32c_device::and_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG16(dr);
	int res = drval & (UINT16)op;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	SET_NZ00_16(res);
}


void dsp32c_device::test_di(UINT32 op)
{
	int drval = REG16((op >> 16) & 0x1f);
	int res = drval & (UINT16)op;
	SET_NZ00_16(res);
}



//**************************************************************************
//  CAU 24-BIT ARITHMETIC IMPLEMENTATION
//**************************************************************************

void dsp32c_device::adde_si(UINT32 op)
{
	int dr = (op >> 21) & 0x1f;
	int hrval = REG24((op >> 16) & 0x1f);
	int res = hrval + EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = TRUNCATE24(res);
	SET_NZCV_24(hrval, op << 8, res);
}


void dsp32c_device::adde_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s2rval + s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		SET_NZCV_24(s1rval, s2rval, res);
	}
}


void dsp32c_device::mul2e_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = s1rval * 2;
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		SET_NZCV_24(s1rval, 0, res);
	}
}


void dsp32c_device::subre_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s1rval - s2rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		SET_NZCV_24(s1rval, s2rval, res);
	}
}


void dsp32c_device::addre_ss(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::sube_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s2rval - s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		SET_NZCV_24(s1rval, s2rval, res);
	}
}


void dsp32c_device::nege_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = -s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		SET_NZCV_24(s1rval, 0, res);
	}
}


void dsp32c_device::andce_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s2rval & ~s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		SET_NZ00_24(res);
	}
}


void dsp32c_device::cmpe_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int drval = REG24((op >> 16) & 0x1f);
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = drval - s1rval;
		SET_NZCV_24(drval, s1rval, res);
	}
}


void dsp32c_device::xore_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s2rval ^ s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		SET_NZ00_24(res);
	}
}


void dsp32c_device::rcre_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = ((m_nzcflags >> 1) & 0x800000) | (s1rval >> 1);
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		m_nzcflags = res | ((s1rval & 1) << 24);
		m_vflags = 0;
	}
}


void dsp32c_device::ore_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s2rval | s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		SET_NZ00_24(res);
	}
}


void dsp32c_device::rcle_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = ((m_nzcflags >> 24) & 0x000001) | (s1rval << 1);
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		m_nzcflags = res | ((s1rval & 0x800000) << 1);
		m_vflags = 0;
	}
}


void dsp32c_device::shre_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = s1rval >> 1;
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		m_nzcflags = res | ((s1rval & 1) << 24);
		m_vflags = 0;
	}
}


void dsp32c_device::div2e_s(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = (s1rval & 0x800000) | (s1rval >> 1);
		if (IS_WRITEABLE(dr))
			m_r[dr] = TRUNCATE24(res);
		m_nzcflags = res | ((s1rval & 1) << 24);
		m_vflags = 0;
	}
}


void dsp32c_device::ande_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int dr = (op >> 16) & 0x1f;
		int s1rval = REG24((op >> 5) & 0x1f);
		int s2rval = (op & 0x800) ? REG24((op >> 0) & 0x1f) : REG24(dr);
		int res = s2rval & s1rval;
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		SET_NZ00_24(res);
	}
}


void dsp32c_device::teste_ss(UINT32 op)
{
	if (CONDITION_IS_TRUE())
	{
		int drval = REG24((op >> 16) & 0x1f);
		int s1rval = REG24((op >> 5) & 0x1f);
		int res = drval & s1rval;
		SET_NZ00_24(res);
	}
}


void dsp32c_device::adde_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = drval + EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = TRUNCATE24(res);
	SET_NZCV_24(drval, op << 8, res);
}


void dsp32c_device::subre_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = EXTEND16_TO_24(op) - drval;
	if (IS_WRITEABLE(dr))
		m_r[dr] = TRUNCATE24(res);
	SET_NZCV_24(drval, op << 8, res);
}


void dsp32c_device::addre_di(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::sube_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = drval - EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = TRUNCATE24(res);
	SET_NZCV_24(drval, op << 8, res);
}


void dsp32c_device::andce_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = drval & ~EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
	SET_NZ00_24(res);
}


void dsp32c_device::cmpe_di(UINT32 op)
{
	int drval = REG24((op >> 16) & 0x1f);
	int res = drval - EXTEND16_TO_24(op);
	SET_NZCV_24(drval, op << 8, res);
}


void dsp32c_device::xore_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = drval ^ EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
	SET_NZ00_24(res);
}


void dsp32c_device::ore_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = drval | EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
	SET_NZ00_24(res);
}


void dsp32c_device::ande_di(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	int drval = REG24(dr);
	int res = drval & EXTEND16_TO_24(op);
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
	SET_NZ00_24(res);
}


void dsp32c_device::teste_di(UINT32 op)
{
	int drval = REG24((op >> 16) & 0x1f);
	int res = drval & EXTEND16_TO_24(op);
	SET_NZ00_24(res);
}



//**************************************************************************
//  CAU LOAD/STORE IMPLEMENTATION
//**************************************************************************

void dsp32c_device::load_hi(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	UINT32 res = RBYTE(EXTEND16_TO_24(op));
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	m_nzcflags = res << 8;
	m_vflags = 0;
}


void dsp32c_device::load_li(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	UINT32 res = RBYTE(EXTEND16_TO_24(op));
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
	m_nzcflags = res << 8;
	m_vflags = 0;
}


void dsp32c_device::load_i(UINT32 op)
{
	UINT32 res = RWORD(EXTEND16_TO_24(op));
	int dr = (op >> 16) & 0x1f;
	if (IS_WRITEABLE(dr))
		m_r[dr] = EXTEND16_TO_24(res);
	m_nzcflags = res << 8;
	m_vflags = 0;
}


void dsp32c_device::load_ei(UINT32 op)
{
	UINT32 res = TRUNCATE24(RLONG(EXTEND16_TO_24(op)));
	int dr = (op >> 16) & 0x1f;
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
	m_nzcflags = res;
	m_vflags = 0;
}


void dsp32c_device::store_hi(UINT32 op)
{
	WBYTE(EXTEND16_TO_24(op), m_r[(op >> 16) & 0x1f] >> 8);
}


void dsp32c_device::store_li(UINT32 op)
{
	WBYTE(EXTEND16_TO_24(op), m_r[(op >> 16) & 0x1f]);
}


void dsp32c_device::store_i(UINT32 op)
{
	WWORD(EXTEND16_TO_24(op), REG16((op >> 16) & 0x1f));
}


void dsp32c_device::store_ei(UINT32 op)
{
	WLONG(EXTEND16_TO_24(op), (INT32)(REG24((op >> 16) & 0x1f) << 8) >> 8);
}


void dsp32c_device::load_hr(UINT32 op)
{
	if (!(op & 0x400))
	{
		int dr = (op >> 16) & 0x1f;
		UINT32 res = cau_read_pi_1byte(op) << 8;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		m_nzcflags = res << 8;
		m_vflags = 0;
	}
	else
		unimplemented(op);
}


void dsp32c_device::load_lr(UINT32 op)
{
	if (!(op & 0x400))
	{
		int dr = (op >> 16) & 0x1f;
		UINT32 res = cau_read_pi_1byte(op);
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		m_nzcflags = res << 8;
		m_vflags = 0;
	}
	else
		unimplemented(op);
}


void dsp32c_device::load_r(UINT32 op)
{
	if (!(op & 0x400))
	{
		UINT32 res = cau_read_pi_2byte(op);
		int dr = (op >> 16) & 0x1f;
		if (IS_WRITEABLE(dr))
			m_r[dr] = EXTEND16_TO_24(res);
		m_nzcflags = res << 8;
		m_vflags = 0;
	}
	else
		unimplemented(op);
}


void dsp32c_device::load_er(UINT32 op)
{
	if (!(op & 0x400))
	{
		UINT32 res = TRUNCATE24(cau_read_pi_4byte(op));
		int dr = (op >> 16) & 0x1f;
		if (IS_WRITEABLE(dr))
			m_r[dr] = res;
		m_nzcflags = res;
		m_vflags = 0;
	}
	else
		unimplemented(op);
}


void dsp32c_device::store_hr(UINT32 op)
{
	if (!(op & 0x400))
		cau_write_pi_1byte(op, m_r[(op >> 16) & 0x1f] >> 8);
	else
		unimplemented(op);
}


void dsp32c_device::store_lr(UINT32 op)
{
	if (!(op & 0x400))
		cau_write_pi_1byte(op, m_r[(op >> 16) & 0x1f]);
	else
		unimplemented(op);
}


void dsp32c_device::store_r(UINT32 op)
{
	if (!(op & 0x400))
		cau_write_pi_2byte(op, REG16((op >> 16) & 0x1f));
	else
		unimplemented(op);
}


void dsp32c_device::store_er(UINT32 op)
{
	if (!(op & 0x400))
		cau_write_pi_4byte(op, REG24((op >> 16) & 0x1f));
	else
		unimplemented(op);
}


void dsp32c_device::load24(UINT32 op)
{
	int dr = (op >> 16) & 0x1f;
	UINT32 res = (op & 0xffff) + ((op >> 5) & 0xff0000);
	if (IS_WRITEABLE(dr))
		m_r[dr] = res;
}



//**************************************************************************
//  DAU FORM 1 IMPLEMENTATION
//**************************************************************************

void dsp32c_device::d1_aMpp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval + DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_aMpm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval - DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_aMmp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval + DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_aMmm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval - DEFERRED_MULTIPLIER((op >> 26) & 7) * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_0px(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
	(void)xval;
}


void dsp32c_device::d1_0mx(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
	(void)xval;
}


void dsp32c_device::d1_1pp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval + xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_1pm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval - xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_1mp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval + xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_1mm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval - xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d1_aMppr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d1_aMpmr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d1_aMmpr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d1_aMmmr(UINT32 op)
{
	unimplemented(op);
}



//**************************************************************************
//  DAU FORM 2 IMPLEMENTATION
//**************************************************************************

void dsp32c_device::d2_aMpp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = m_a[(op >> 26) & 7] + yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d2_aMpm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = m_a[(op >> 26) & 7] - yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d2_aMmp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = -m_a[(op >> 26) & 7] + yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d2_aMmm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = -m_a[(op >> 26) & 7] - yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d2_aMppr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d2_aMpmr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d2_aMmpr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d2_aMmmr(UINT32 op)
{
	unimplemented(op);
}



//**************************************************************************
//  DAU FORM 3 IMPLEMENTATION
//**************************************************************************

void dsp32c_device::d3_aMpp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = m_a[(op >> 26) & 7] + yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d3_aMpm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = m_a[(op >> 26) & 7] - yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d3_aMmp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = -m_a[(op >> 26) & 7] + yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d3_aMmm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 1, xval);
	double res = -m_a[(op >> 26) & 7] - yval * xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d3_aMppr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d3_aMpmr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d3_aMmpr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d3_aMmmr(UINT32 op)
{
	unimplemented(op);
}



//**************************************************************************
//  DAU FORM 4 IMPLEMENTATION
//**************************************************************************

void dsp32c_device::d4_pp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval + xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d4_pm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = yval - xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d4_mp(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval + xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d4_mm(UINT32 op)
{
	double xval = dau_read_pi_double_1st(op >> 14, 1);
	double yval = dau_read_pi_double_2nd(op >> 7, 0, xval);
	double res = -yval - xval;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, yval);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d4_ppr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d4_pmr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d4_mpr(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d4_mmr(UINT32 op)
{
	unimplemented(op);
}



//**************************************************************************
//  DAU FORM 5 IMPLEMENTATION
//**************************************************************************

void dsp32c_device::d5_ic(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d5_oc(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d5_float(UINT32 op)
{
	double res = (double)(INT16)dau_read_pi_2bytes(op >> 7);
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d5_int(UINT32 op)
{
	double val = dau_read_pi_double_1st(op >> 7, 0);
	int zpi = (op >> 0) & 0x7f;
	INT16 res;
	if (!(DAUC & 0x10)) val = floor(val + 0.5);
	else val = ceil(val - 0.5);
	res = (INT16)val;
	if (zpi != 7)
		dau_write_pi_2bytes(zpi, res);
	dau_set_val_noflags((op >> 21) & 3, dsp_to_double(res << 16));
}


void dsp32c_device::d5_round(UINT32 op)
{
	double res = (double)(float)dau_read_pi_double_1st(op >> 7, 0);
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d5_ifalt(UINT32 op)
{
	int ar = (op >> 21) & 3;
	double res = m_a[ar];
	int zpi = (op >> 0) & 0x7f;
	if (NFLAG)
		res = dau_read_pi_double_1st(op >> 7, 0);
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_noflags(ar, res);
}


void dsp32c_device::d5_ifaeq(UINT32 op)
{
	int ar = (op >> 21) & 3;
	double res = m_a[ar];
	int zpi = (op >> 0) & 0x7f;
	if (ZFLAG)
		res = dau_read_pi_double_1st(op >> 7, 0);
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_noflags(ar, res);
}


void dsp32c_device::d5_ifagt(UINT32 op)
{
	int ar = (op >> 21) & 3;
	double res = m_a[ar];
	int zpi = (op >> 0) & 0x7f;
	if (!NFLAG && !ZFLAG)
		res = dau_read_pi_double_1st(op >> 7, 0);
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_noflags(ar, res);
}


void dsp32c_device::d5_float24(UINT32 op)
{
	double res = (double)((INT32)(dau_read_pi_4bytes(op >> 7) << 8) >> 8);
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_double(zpi, res);
	dau_set_val_flags((op >> 21) & 3, res);
}


void dsp32c_device::d5_int24(UINT32 op)
{
	double val = dau_read_pi_double_1st(op >> 7, 0);
	int zpi = (op >> 0) & 0x7f;
	INT32 res;
	if (!(DAUC & 0x10)) val = floor(val + 0.5);
	else val = ceil(val - 0.5);
	res = (INT32)val;
	if (res > 0x7fffff) res = 0x7fffff;
	else if (res < -0x800000) res = -0x800000;
	if (zpi != 7)
		dau_write_pi_4bytes(zpi, (INT32)(res << 8) >> 8);
	dau_set_val_noflags((op >> 21) & 3, dsp_to_double(res << 8));
}


void dsp32c_device::d5_ieee(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d5_dsp(UINT32 op)
{
	unimplemented(op);
}


void dsp32c_device::d5_seed(UINT32 op)
{
	UINT32 val = dau_read_pi_4bytes(op >> 7);
	INT32 res = val ^ 0x7fffffff;
	int zpi = (op >> 0) & 0x7f;
	if (zpi != 7)
		dau_write_pi_4bytes(zpi, res);
	dau_set_val_flags((op >> 21) & 3, dsp_to_double((INT32)res));
}



//**************************************************************************
//  FUNCTION TABLE
//**************************************************************************

void (dsp32c_device::*const dsp32c_device::s_dsp32ops[])(UINT32 op) =
{
	&dsp32c_device::nop,		&dsp32c_device::goto_t,		&dsp32c_device::goto_pl,	&dsp32c_device::goto_mi,	&dsp32c_device::goto_ne,	&dsp32c_device::goto_eq,	&dsp32c_device::goto_vc,	&dsp32c_device::goto_vs,	// 00
	&dsp32c_device::goto_cc,	&dsp32c_device::goto_cs,	&dsp32c_device::goto_ge,	&dsp32c_device::goto_lt,	&dsp32c_device::goto_gt,	&dsp32c_device::goto_le,	&dsp32c_device::goto_hi,	&dsp32c_device::goto_ls,
	&dsp32c_device::goto_auc,	&dsp32c_device::goto_aus,	&dsp32c_device::goto_age,	&dsp32c_device::goto_alt,	&dsp32c_device::goto_ane,	&dsp32c_device::goto_aeq,	&dsp32c_device::goto_avc,	&dsp32c_device::goto_avs,	// 01
	&dsp32c_device::goto_agt,	&dsp32c_device::goto_ale,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::goto_ibe,	&dsp32c_device::goto_ibf,	&dsp32c_device::goto_obf,	&dsp32c_device::goto_obe,	&dsp32c_device::goto_pde,	&dsp32c_device::goto_pdf,	&dsp32c_device::goto_pie,	&dsp32c_device::goto_pif,	// 02
	&dsp32c_device::goto_syc,	&dsp32c_device::goto_sys,	&dsp32c_device::goto_fbc,	&dsp32c_device::goto_fbs,	&dsp32c_device::goto_irq1lo,&dsp32c_device::goto_irq1hi,&dsp32c_device::goto_irq2lo,&dsp32c_device::goto_irq2hi,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 03
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 04
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 05
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	// 06
	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,
	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	// 07
	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,	&dsp32c_device::dec_goto,

	&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		// 08
	&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,
	&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		// 09
	&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,		&dsp32c_device::call,
	&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		// 0a
	&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,
	&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		// 0b
	&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,		&dsp32c_device::add_si,

	&dsp32c_device::add_ss,		&dsp32c_device::mul2_s,		&dsp32c_device::subr_ss,	&dsp32c_device::addr_ss,	&dsp32c_device::sub_ss,		&dsp32c_device::neg_s,		&dsp32c_device::andc_ss,	&dsp32c_device::cmp_ss,		// 0c
	&dsp32c_device::xor_ss,		&dsp32c_device::rcr_s,		&dsp32c_device::or_ss,		&dsp32c_device::rcl_s,		&dsp32c_device::shr_s,		&dsp32c_device::div2_s,		&dsp32c_device::and_ss,		&dsp32c_device::test_ss,
	&dsp32c_device::add_di,		&dsp32c_device::illegal,	&dsp32c_device::subr_di,	&dsp32c_device::addr_di,	&dsp32c_device::sub_di,		&dsp32c_device::illegal,	&dsp32c_device::andc_di,	&dsp32c_device::cmp_di,		// 0d
	&dsp32c_device::xor_di,		&dsp32c_device::illegal,	&dsp32c_device::or_di,		&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::and_di,		&dsp32c_device::test_di,
	&dsp32c_device::load_hi,	&dsp32c_device::load_hi,	&dsp32c_device::load_li,	&dsp32c_device::load_li,	&dsp32c_device::load_i,		&dsp32c_device::load_i,		&dsp32c_device::load_ei,	&dsp32c_device::load_ei,	// 0e
	&dsp32c_device::store_hi,	&dsp32c_device::store_hi,	&dsp32c_device::store_li,	&dsp32c_device::store_li,	&dsp32c_device::store_i,	&dsp32c_device::store_i,	&dsp32c_device::store_ei,	&dsp32c_device::store_ei,
	&dsp32c_device::load_hr,	&dsp32c_device::load_hr,	&dsp32c_device::load_lr,	&dsp32c_device::load_lr,	&dsp32c_device::load_r,		&dsp32c_device::load_r,		&dsp32c_device::load_er,	&dsp32c_device::load_er,	// 0f
	&dsp32c_device::store_hr,	&dsp32c_device::store_hr,	&dsp32c_device::store_lr,	&dsp32c_device::store_lr,	&dsp32c_device::store_r,	&dsp32c_device::store_r,	&dsp32c_device::store_er,	&dsp32c_device::store_er,

	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	// 10
	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,
	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	// 11
	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,
	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	// 12
	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,
	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	// 13
	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,

	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	// 14
	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,
	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	// 15
	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,
	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpp,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	&dsp32c_device::d1_aMpm,	// 16
	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmp,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,	&dsp32c_device::d1_aMmm,
	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	// 17
	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,

	&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		&dsp32c_device::d1_0px,		// 18
	&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,		&dsp32c_device::d1_0mx,
	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	// 19
	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,
	&dsp32c_device::d1_1pp,		&dsp32c_device::d1_1pp,		&dsp32c_device::d1_1pp,		&dsp32c_device::d1_1pp,		&dsp32c_device::d1_1pm,		&dsp32c_device::d1_1pm,		&dsp32c_device::d1_1pm,		&dsp32c_device::d1_1pm,		// 1a
	&dsp32c_device::d1_1mp,		&dsp32c_device::d1_1mp,		&dsp32c_device::d1_1mp,		&dsp32c_device::d1_1mp,		&dsp32c_device::d1_1mm,		&dsp32c_device::d1_1mm,		&dsp32c_device::d1_1mm,		&dsp32c_device::d1_1mm,
	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMppr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	&dsp32c_device::d1_aMpmr,	// 1b
	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmpr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,	&dsp32c_device::d1_aMmmr,

	&dsp32c_device::d4_pp,		&dsp32c_device::d4_pp,		&dsp32c_device::d4_pp,		&dsp32c_device::d4_pp,		&dsp32c_device::d4_pm,		&dsp32c_device::d4_pm,		&dsp32c_device::d4_pm,		&dsp32c_device::d4_pm,		// 1c
	&dsp32c_device::d4_mp,		&dsp32c_device::d4_mp,		&dsp32c_device::d4_mp,		&dsp32c_device::d4_mp,		&dsp32c_device::d4_mm,		&dsp32c_device::d4_mm,		&dsp32c_device::d4_mm,		&dsp32c_device::d4_mm,
	&dsp32c_device::d4_ppr,		&dsp32c_device::d4_ppr,		&dsp32c_device::d4_ppr,		&dsp32c_device::d4_ppr,		&dsp32c_device::d4_pmr,		&dsp32c_device::d4_pmr,		&dsp32c_device::d4_pmr,		&dsp32c_device::d4_pmr,		// 1d
	&dsp32c_device::d4_mpr,		&dsp32c_device::d4_mpr,		&dsp32c_device::d4_mpr,		&dsp32c_device::d4_mpr,		&dsp32c_device::d4_mmr,		&dsp32c_device::d4_mmr,		&dsp32c_device::d4_mmr,		&dsp32c_device::d4_mmr,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 1e
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 1f
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	// 20
	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,
	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	// 21
	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,
	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	// 22
	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,
	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	// 23
	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,

	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	// 24
	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,
	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	// 25
	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,
	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	// 26
	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,
	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	// 27
	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,

	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	// 28
	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,
	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	// 29
	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,
	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpp,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	&dsp32c_device::d2_aMpm,	// 2a
	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmp,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,	&dsp32c_device::d2_aMmm,
	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMppr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	&dsp32c_device::d2_aMpmr,	// 2b
	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmpr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,	&dsp32c_device::d2_aMmmr,

	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 2c
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 2d
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 2e
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 2f
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	// 30
	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,
	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	// 31
	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,
	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	// 32
	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,
	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	// 33
	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,

	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	// 34
	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,
	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	// 35
	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,
	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	// 36
	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,
	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	// 37
	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,

	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	// 38
	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,
	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	// 39
	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,
	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpp,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	&dsp32c_device::d3_aMpm,	// 3a
	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmp,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,	&dsp32c_device::d3_aMmm,
	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMppr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	&dsp32c_device::d3_aMpmr,	// 3b
	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmpr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,	&dsp32c_device::d3_aMmmr,

	&dsp32c_device::d5_ic,		&dsp32c_device::d5_ic,		&dsp32c_device::d5_ic,		&dsp32c_device::d5_ic,		&dsp32c_device::d5_oc,		&dsp32c_device::d5_oc,		&dsp32c_device::d5_oc,		&dsp32c_device::d5_oc,		// 3c
	&dsp32c_device::d5_float,	&dsp32c_device::d5_float,	&dsp32c_device::d5_float,	&dsp32c_device::d5_float,	&dsp32c_device::d5_int,		&dsp32c_device::d5_int,		&dsp32c_device::d5_int,		&dsp32c_device::d5_int,
	&dsp32c_device::d5_round,	&dsp32c_device::d5_round,	&dsp32c_device::d5_round,	&dsp32c_device::d5_round,	&dsp32c_device::d5_ifalt,	&dsp32c_device::d5_ifalt,	&dsp32c_device::d5_ifalt,	&dsp32c_device::d5_ifalt,	// 3d
	&dsp32c_device::d5_ifaeq,	&dsp32c_device::d5_ifaeq,	&dsp32c_device::d5_ifaeq,	&dsp32c_device::d5_ifaeq,	&dsp32c_device::d5_ifagt,	&dsp32c_device::d5_ifagt,	&dsp32c_device::d5_ifagt,	&dsp32c_device::d5_ifagt,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 3e
	&dsp32c_device::d5_float24,	&dsp32c_device::d5_float24,	&dsp32c_device::d5_float24,	&dsp32c_device::d5_float24,	&dsp32c_device::d5_int24,	&dsp32c_device::d5_int24,	&dsp32c_device::d5_int24,	&dsp32c_device::d5_int24,
	&dsp32c_device::d5_ieee,	&dsp32c_device::d5_ieee,	&dsp32c_device::d5_ieee,	&dsp32c_device::d5_ieee,	&dsp32c_device::d5_dsp,		&dsp32c_device::d5_dsp,		&dsp32c_device::d5_dsp,		&dsp32c_device::d5_dsp,		// 3f
	&dsp32c_device::d5_seed,	&dsp32c_device::d5_seed,	&dsp32c_device::d5_seed,	&dsp32c_device::d5_seed,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 40
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 41
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 42
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 43
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 44
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 45
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::do_i,		&dsp32c_device::do_r,		&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 46
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 47
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 48
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 49
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	// 4a
	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,
	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	// 4b
	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,	&dsp32c_device::adde_si,

	&dsp32c_device::adde_ss,	&dsp32c_device::mul2e_s,	&dsp32c_device::subre_ss,	&dsp32c_device::addre_ss,	&dsp32c_device::sube_ss,	&dsp32c_device::nege_s,		&dsp32c_device::andce_ss,	&dsp32c_device::cmpe_ss,	// 4c
	&dsp32c_device::xore_ss,	&dsp32c_device::rcre_s,		&dsp32c_device::ore_ss,		&dsp32c_device::rcle_s,		&dsp32c_device::shre_s,		&dsp32c_device::div2e_s,	&dsp32c_device::ande_ss,	&dsp32c_device::teste_ss,
	&dsp32c_device::adde_di,	&dsp32c_device::illegal,	&dsp32c_device::subre_di,	&dsp32c_device::addre_di,	&dsp32c_device::sube_di,	&dsp32c_device::illegal,	&dsp32c_device::andce_di,	&dsp32c_device::cmpe_di,	// 4d
	&dsp32c_device::xore_di,	&dsp32c_device::illegal,	&dsp32c_device::ore_di,		&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::ande_di,	&dsp32c_device::teste_di,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 4e
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	// 4f
	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,	&dsp32c_device::illegal,

	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 50
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 51
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 52
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 53
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,

	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 54
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 55
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 56
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 57
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,

	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 58
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 59
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 5a
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 5b
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,

	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 5c
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 5d
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 5e
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		// 5f
	&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,		&dsp32c_device::goto24,

	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 60
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 61
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 62
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 63
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,

	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 64
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 65
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 66
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 67
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,

	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 68
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 69
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 6a
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 6b
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,

	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 6c
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 6d
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 6e
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		// 6f
	&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,		&dsp32c_device::load24,

	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 70
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 71
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 72
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 73
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,

	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 74
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 75
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 76
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 77
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,

	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 78
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 79
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 7a
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 7b
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,

	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 7c
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 7d
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 7e
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		// 7f
	&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24,		&dsp32c_device::call24
};


/*

    Most common OPs in Race Drivin':

301681217 - op   0 - nop
164890391 - op 4A1 - adde_si
99210113 - op 661 - load24
86010010 - op  F7 - load_er
61148739 - op 4D4 - sube_di
52693763 - op 180 - d1_0px
41525754 - op  FF - store_er
35033321 - op 380 - d3_aMpp
31621151 - op 4C0 - adde_ss
28076244 - op 660 - load24
19190505 - op 4C1 - mul2e_s
13270852 - op  F5 - load_r
12535169 - op 1A4 - d1_1pm
12265141 - op 4C4 - sube_ss
10748211 - op 4CD - div2e_s
10493660 - op  FD - store_r
 9721263 - op 189
 9415685 - op 3C8
 9294148 - op 3D5
 8887846 - op 1A1
 8788648 - op 381
 8185239 - op 300
 7241256 - op 383
 6877349 - op 4A3
 6832295 - op 181
 6601270 - op 3E8
 6562483 - op 4A4
 6553514 - op 3C9
 6270430 - op 280
 6041485 - op 1A0
 5299529 - op 304
 5110926 - op 382
 4922253 - op 363
 4603670 - op 4D7
 4164327 - op 4AE
 3980085 - op 3EC
 3599198 - op 3CC
 3543878 - op 3D0
 3489158 - op   4
 3463235 - op 321
 3335995 - op 3F9
 3001546 - op 4CE
 2882940 - op 129
 2882940 - op 1A5
 2882940 - op 342
 2841981 - op 360
 2663417 - op  FB
 2059640 - op 3ED
 1867166 - op 1A8
 1830789 - op 305
 1753312 - op 301
 1726866 - op   5
 1594991 - op  12
 1571286 - op  19
 1507644 - op  A2
 1418846 - op 3CD
 1273134 - op  F3
 1177914 - op 4C7
 1175720 - op 188
 1091848 - op 3E9
 1088206 - op 6FF
 1088204 - op 4CA
 1012639 - op 101
  939617 - op 4C5

*/
